home *** CD-ROM | disk | FTP | other *** search
/ Imagination Express: Destination Pyramids / Imagination Express - Destination Pyramids.iso / pc / setup.ms_ / setup.bin
Text File  |  1996-02-27  |  21KB  |  595 lines

  1. '$DEFINE DEBUG
  2.  
  3. '$INCLUDE 'setupapi.inc'
  4. '$INCLUDE 'msdetect.inc'
  5. '$INCLUDE 'themenam.inc'
  6.  
  7. ''DIALOG ID's
  8. CONST WELCOME                    = 100
  9. CONST ASKQUIT                    = 200
  10. CONST DESTPATH                   = 300
  11. CONST EXITFAILURE                = 400
  12. CONST EXITQUIT                   = 600
  13. CONST EXITSUCCESS                = 700
  14. CONST APPHELP                    = 900
  15. CONST VERIFYWINPATH              = 2400
  16. CONST ERROR_UNEXPECTED           = 2200
  17. CONST EXITSUCCESSRESTART         = 2300
  18. CONST NOVIRTUALMEM               = 2600
  19. CONST ASKRESTART                 = 2700
  20. CONST RESTART                    = 2800
  21. CONST README                     = 2900
  22. CONST CUSTINST                   = 6200
  23.  
  24. ''OTHER CONSTANTS
  25. CONST LOGO                       = 1
  26. CONST EXIT_FAIL_NOT31            = 1500   '' NOT RUNNING AT LEAST WINDOWS 3.1
  27. CONST EXIT_FAIL_NOTINTEL         = 1600   '' NOT RUNNING ON INTEL
  28. CONST EXIT_FAIL_NOTENHANCED      = 1700   '' NOT RUNNING IN ENHANCED MODE
  29. CONST MB_YESNO                   = 4
  30. CONST MB_ICONINFORMATION         = 64
  31. CONST IDYES                      = 6
  32. CONST IDNO                       = 7
  33.  
  34. GLOBAL DESTWIN$         ''Windows directory
  35. GLOBAL DESTWINSYS$      ''Windows\System directory
  36. GLOBAL DESTDINER$       ''Diner directory
  37. GLOBAL SRCDEMO$         ''Demo files directory
  38. GLOBAL bInstallDVA%
  39.  
  40. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  41. DECLARE SUB      UpdateWinG32 (szOrig$)
  42.  
  43. DECLARE FUNCTION OnWin3x            LIB "setuphlp.DLL" AS INTEGER
  44. DECLARE FUNCTION VflatdPresent      LIB "setuphlp.DLL" AS INTEGER
  45. DECLARE FUNCTION RestartWindows     LIB "setuphlp.DLL" AS INTEGER
  46. DECLARE FUNCTION IsWin32FileNewer   LIB "setuphlp.DLL" (szOrig$,szNew$) AS INTEGER
  47. DECLARE SUB      RenameFilePlease   LIB "setuphlp.DLL" (szOrig$,szNew$)
  48.  
  49. DECLARE FUNCTION OnWindowsNT     LIB "INIUPD.DLL" AS INTEGER
  50. DECLARE FUNCTION PagingEnabled   LIB "INIUPD.DLL" AS INTEGER
  51. DECLARE FUNCTION ExitWindowsExec LIB "USER.EXE" (arg1$, arg2$) AS INTEGER
  52. DECLARE FUNCTION StartWaitCursor LIB "MSCUISTF.DLL" AS INTEGER
  53. DECLARE FUNCTION StopWaitCursor  LIB "MSCUISTF.DLL" AS INTEGER
  54.  
  55. INIT:
  56.    CUIDLL$ = "MSCUISTF.DLL"
  57.    bInstallDVA% = 0
  58.    ExitCode% = 0
  59.    ON ERROR GOTO ERRORTRAP
  60.  
  61.    SrcDir$ = GetSymbolValue ("STF_SRCDIR")
  62.    DESTWIN$ = GetWindowsDir()
  63.    DESTDINER$ = "C:\IMAGINE\"
  64.  
  65.    SetBitmap CUIDLL$, LOGO
  66.    SetTitle "Imagination Express Setup"
  67.  
  68.    szInf$ = GetSymbolValue ("STF_SRCINFPATH")
  69.    IF szInf$ = "" THEN
  70.       szInf$ = GetSymbolValue ("STF_CWDDIR") + "setup.inf"
  71.    ENDIF
  72.    ReadInfFile szInf$
  73.  
  74. CHECK:
  75.    '' Check to make sure we're running at least Win 3.1
  76.    IF GetWindowsMajorVersion < 3 THEN
  77.       ExitCode% = EXIT_FAIL_NOT31
  78.       GOTO WELCOME
  79.    ENDIF
  80.  
  81.    IF GetWindowsMajorVersion = 3 AND GetWindowsMinorVersion < 1 THEN
  82.       ExitCode% = EXIT_FAIL_NOT31
  83.       GOTO WELCOME
  84.    ENDIF
  85.  
  86.    '' Check to see that we're running in enhanced mode or on an INTEL-Based NT machine
  87.    '' GetWindowsMode < 2 means not INTEL if running NT, or not ENHANCED if running Windows
  88.    IF GetWindowsMode < 2 THEN
  89.       IF OnWindowsNT() THEN
  90.          ExitCode% = EXIT_FAIL_NOTINTEL
  91.       ELSE
  92.          ExitCode% = EXIT_FAIL_NOTENHANCED
  93.       ENDIF
  94.       GOTO WELCOME
  95.    ENDIF
  96.  
  97. VIRTUALMEM:
  98.    '' Check to make sure windows is set up for virtual memory
  99.    IF PagingEnabled() = 0 THEN
  100.       sz$ = UIStartDlg (CUIDLL$, NOVIRTUALMEM, "FInfoDlgProc", 0, "")
  101.       IF sz$ = "REACTIVATE" THEN
  102.          GOTO VIRTUALMEM
  103.       ENDIF
  104.       UIPop 1
  105.       GOTO WELCOME
  106.    ENDIF
  107.  
  108. WELCOME:
  109.  
  110.    sz$ = UIStartDlg (CUIDLL$, WELCOME, "FInfoDlgProc", 0, "")
  111.  
  112.    IF sz$ <> "CONTINUE" THEN
  113.       GOSUB ASKQUIT
  114.       GOTO WELCOME
  115.    ENDIF
  116.  
  117.    UIPop 1     '' destroy dialog on top of stack
  118.  
  119.    IF ExitCode% <> 0 THEN
  120.       GOTO EXITFAIL
  121.    ENDIF
  122.  
  123. VERIFYWINPATH:
  124.    '' Verify that setup has found the correct \windows directory
  125.    SetSymbolValue "EditTextIn", DESTWIN$
  126.    SetSymbolValue "EditFocus", "END"
  127.    sz$ = UIStartDlg (CUIDLL$, VERIFYWINPATH, "FEditDlgProc", 0, "")
  128.    IF sz$ = "REACTIVATE" THEN
  129.       GOTO VERIFYWINPATH
  130.    ELSEIF SZ$ = "EXIT" THEN
  131.       GOSUB ASKQUIT
  132.       GOTO VERIFYWINPATH
  133.    ENDIF
  134.    sz$ = GetSymbolValue ("EditTextOut")
  135.    IF sz$ <> DESTWIN$ THEN
  136.  
  137.       '' make sure user ended path with a '\'
  138.       '' if not, help 'em out
  139.       DESTWIN$ = sz$
  140.       DESTWIN$ = LTRIM$(RTRIM$ (DESTWIN$))
  141.       IF INSTR (LEN (DESTWIN$) - 1, DESTWIN$, "\") = 0 THEN
  142.          DESTWIN$ = DESTWIN$ + "\"
  143.       ENDIF
  144.       '' make sure path has a drive letter and drive letter is valid
  145.       sz$ = MID$ (DESTWIN$, 2, 1)
  146.       IF sz$ <> ":" THEN
  147.          i% = DoMsgBox ("You must specify a valid drive letter in the path name.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  148.          GOTO VERIFYWINPATH
  149.       ENDIF
  150.       sz$ = MID$ (DESTWIN$, 1, 1)
  151.       IF IsDriveValid (sz$) = 0 THEN
  152.          i% = DoMsgBox ("You must specify a valid drive letter in the path name.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  153.          GOTO VERIFYWINPATH
  154.       ENDIF
  155.       '' make sure path is valid (i.e. it exists)
  156.       IF DoesDirExist (DESTWIN$) = 0 THEN
  157.          i% = DoMsgBox (DESTWIN$ + " is not a valid path name.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  158.          GOTO VERIFYWINPATH
  159.       ENDIF
  160.  
  161.    ENDIF
  162.  
  163.    UIPop 1
  164.  
  165.    DESTWINSYS$ = DESTWIN$
  166.    IF INSTR (LEN (DESTWINSYS$) - 1, DESTWINSYS$, "\") = 0 THEN
  167.       DESTWINSYS$ = DESTWINSYS$ + "\"
  168.    ENDIF
  169.    DESTWINSYS$ = DESTWINSYS$ + "SYSTEM"
  170.  
  171. INITCOPYLISTFORESTIMATE:
  172.    '' add possible files to copy list so we can get the copy list cost for the next dialog
  173.    '' (so we know how much space the files will take up)
  174.    '' after the next dialog, we'll rebuild an actual copy list
  175.    '' (we can't do it accurately yet since we don't know where the diner path will be)
  176.    '' NOTE: THIS CANNOT BE A FINAL COPY LIST AS SOME VITAL COMMANDS DON'T APPEAR -
  177.    ''       SEE FINAL COPY LIST SECTION BELOW
  178.  
  179.    i% = StartWaitCursor()
  180.  
  181.    ClearCopyList
  182.  
  183.    AddSectionFilesToCopyList "Diner", SrcDir$, DESTDINER$
  184.    AddSectionFilesToCopyList "DinerWin DLLs", SrcDir$, DESTWINSYS$
  185.  
  186.    '' add demo icon to copy list
  187.    AddSectionFilesToCopyList "Edmark Demo", SrcDir$, DESTDINER$
  188.  
  189.    '' add themepack files to copy list
  190.    AddSectionFilesToCopyList THEMESECTION$, SrcDir$, DESTDINER$ + "Themes\" + THEMEDIR$ + "\"
  191.  
  192.    '' see if DINER.INI file already exists
  193.    '' if not, copy a base INI file
  194.    IF DoesFileExist (DESTWIN$ + "Imagine.INI", femExists) = 0 THEN
  195.       AddSectionFilesToCopyList "INI", SrcDir$, DESTWIN$
  196.    ENDIF
  197.  
  198.    '' see if WAVEMIX.INI file already exists
  199.    '' if not, copy a pre-built one
  200.    IF DoesFileExist (DESTWIN$ + "WAVEMIX.INI", femExists) = 0 THEN
  201.       AddSectionFilesToCopyList "WaveMixIni", SrcDir$, DESTWIN$
  202.    ENDIF
  203.  
  204.    '' ********  WING SECTION STARTS HERE
  205.       AddSectionFilesToCopyList "WinG", SrcDir$, DESTWINSYS$
  206.  
  207.       '
  208.       ' only use DVA on Windows 3.x
  209.       '
  210.       IF OnWin3x() = 1 THEN
  211.          AddSectionFilesToCopyList "dva", SrcDir$, DESTWINSYS$
  212.       END IF
  213.  
  214.       AddSectionFilesToCopyList "wing32", SrcDir$, DESTWINSYS$
  215.  
  216.    '' Add VfW files here
  217.    AddSectionFilesToCopyList "VfW Runtime", SrcDir$, DESTWINSYS$
  218.    AddSectionFilesToCopyList "AVICodecs", SrcDir$, DESTWINSYS$
  219.    AddSectionFilesToCopyList "ACM Drivers", SrcDir$, DESTWINSYS$
  220.    AddSectionFilesToCopyList "Indeo-ini", SrcDir$, DESTWIN$
  221.    AddSectionFilesToCopyList "OLE2", SrcDir$, DESTWINSYS$
  222.    AddSectionFilesToCopyList "MPlayer", SrcDir$, DESTWIN$
  223.    sizereq& = GetCopyListCost ("", "NeededSpace", "ExtraNeeded")
  224.  
  225.    i% = StopWaitCursor()
  226.  
  227. CUSTOMINIT:
  228.    '' SET UP DRIVE AND DIRECTORY SYMBOL VALUES HERE
  229.    SetSymbolValue "DriveStatusText", ""
  230.    sz$ = MID$ (DESTDINER$, 1, 2)
  231.    AddListItem "DriveStatusText", sz$
  232.    sz$ = GetListItem ("NeededSpace", ASC(LCASE$ (DESTDINER$)) - ASC("a") + 1)
  233.    AddListItem "DriveStatusText", sz$
  234.    DinerSpaceAvail& = GetFreeSpaceForDrive (MID$ (DESTDINER$, 1, 1))
  235.    AddListItem "DriveStatusText", STR$ (DinerSpaceAvail&)
  236.    AddListItem "DriveStatusText", ""
  237.    AddListItem "DriveStatusText", ""
  238.    AddListItem "DriveStatusText", ""
  239.    AddListItem "DriveStatusText", DESTDINER$
  240.  
  241. CUSTOM:
  242.    '' Get drive and directory to install Diner to
  243.    sz$ = UIStartDlg (CUIDLL$, CUSTINST, "FCustInstDlgProc", 0, "")
  244.    IF sz$ = "REACTIVATE" THEN
  245.       GOTO CUSTOM
  246.    ELSEIF sz$ = "BACK" THEN
  247.       UIPop 1
  248.       GOTO VERIFYWINPATH
  249.    ELSEIF sz$ = "EXIT" THEN
  250.       GOSUB ASKQUIT
  251.       GOTO CUSTOM
  252.    ELSEIF sz$ = "PATH" THEN
  253.       TEMPDINER$ = DESTDINER$
  254. GETDINERPATH:
  255.       '' Let user choose own path for Diner
  256.       SetSymbolValue "EditTextIn", TEMPDINER$
  257.       SetSymbolValue "EditFocus", "ALL"
  258.       sz$ = UIStartDlg (CUIDLL$, DESTPATH, "FEditDlgProc", 0, "")
  259.       IF sz$ = "REACTIVATE" THEN
  260.          GOTO GETDINERPATH
  261.       ELSEIF sz$ = "BACK" THEN
  262.          UIPop 1
  263.          GOTO CUSTOM
  264.       ELSEIF sz$ = "EXIT" THEN
  265.          GOSUB ASKQUIT
  266.          GOTO GETDINERPATH
  267.       ENDIF
  268.       sz$ = GetSymbolValue ("EditTextOut")
  269.       '' make sure user ended path with a '\'
  270.       '' if not, help 'em out
  271.       TEMPDINER$ = LTRIM$ (RTRIM$ (sz$))
  272.       IF INSTR (LEN (TEMPDINER$) - 1, TEMPDINER$, "\") = 0 THEN
  273.          TEMPDINER$ = TEMPDINER$ + "\"
  274.       ENDIF
  275.       '' make sure path has a drive letter and drive letter is valid
  276.       sz$ = MID$ (TEMPDINER$, 2, 1)
  277.       IF sz$ <> ":" THEN
  278.          i% = DoMsgBox ("You must specify a valid drive letter in the path name.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  279.          GOTO GETDINERPATH
  280.       ENDIF
  281.       sz$ = MID$ (TEMPDINER$, 1, 1)
  282.       IF IsDriveValid (sz$) = 0 THEN
  283.          i% = DoMsgBox ("You must specify a valid drive letter in the path name.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  284.          GOTO GETDINERPATH
  285.       ENDIF
  286.       '' make sure path is valid
  287.       IF IsDirWritable (TEMPDINER$) = 0 THEN
  288.          i% = DoMsgBox (TEMPDINER$ + " is not a valid path name.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  289.          GOTO GETDINERPATH
  290.       ENDIF
  291.       UIPop 1
  292.       DESTDINER$ = TEMPDINER$
  293.       GOTO INITCOPYLISTFORESTIMATE
  294.    ENDIF
  295.  
  296.    UIPop 1
  297.  
  298. CHECKSPACE:
  299. '   IF sizereq& <> 0 THEN
  300. '      i% = DoMsgBox ("Not enough free space on drive.  Please delete some files to free up space or choose a different destination drive.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  301. '      GOTO CUSTOM
  302. '   ENDIF
  303.    amt$ = GetListItem ("ExtraNeeded", ASC(LCASE$ (DESTDINER$)) - ASC("a") + 1)
  304.    amt$ = MID$ (amt$, 1, 1)
  305.    IF amt$ <> "-" THEN
  306.       i% = DoMsgBox ("Not enough free space on destination drive.  Please delete some files to free up space or choose a different destination drive.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  307.       GOTO CUSTOM
  308.    ENDIF
  309.  
  310.    amt$ = GetListItem ("ExtraNeeded", ASC(LCASE$ (DESTWIN$)) - ASC("a") + 1)
  311.    amt$ = MID$ (amt$, 1, 1)
  312.    IF amt$ <> "-" THEN
  313.       i% = DoMsgBox ("Not enough free space on windows drive.  Please delete some files to free up space and run Setup again.", "Imagination Express Setup", MB_ICONHAND + MB_OK)
  314.       GOTO SEEYA
  315.    ENDIF
  316.  
  317.  
  318. INITREALCOPYLIST:
  319.    '' add files to copy list
  320.    ClearCopyList
  321.    AddSectionFilesToCopyList "Diner", SrcDir$, DESTDINER$
  322.    AddSectionFilesToCopyList "DinerWin DLLs", SrcDir$, DESTWINSYS$
  323.  
  324.    '' add demo icon to copy list
  325.    AddSectionFilesToCopyList "Edmark Demo", SrcDir$, DESTDINER$
  326.  
  327.    '' add themepack files to copy list
  328.    AddSectionFilesToCopyList THEMESECTION$, SrcDir$, DESTDINER$ + "Themes\" + THEMEDIR$ + "\"
  329.  
  330.    '' see if DINER.INI file already exists
  331.    '' if not, copy a base INI file
  332.    IF DoesFileExist (DESTWIN$ + "Imagine.INI", femExists) = 0 THEN
  333.       AddSectionFilesToCopyList "INI", SrcDir$, DESTWIN$
  334.    ENDIF
  335.  
  336.    '' see if WAVEMIX.INI file already exists
  337.    '' if not, copy a pre-built one
  338.    IF DoesFileExist (DESTWIN$ + "WAVEMIX.INI", femExists) = 0 THEN
  339.       AddSectionFilesToCopyList "WaveMixIni", SrcDir$, DESTWIN$
  340.    ENDIF
  341.  
  342.    '' ********  WING SECTION STARTS HERE
  343.       AddSectionFilesToCopyList "WinG", SrcDir$, DESTWINSYS$
  344.  
  345.       '
  346.       ' only use DVA on Windows 3.x
  347.       '
  348.       IF OnWin3x() = 1 THEN
  349.          AddSectionFilesToCopyList "dva", SrcDir$, DESTWINSYS$
  350.          IF VflatdPresent() = 0 THEN
  351.             bInstallDVA% = 1
  352.          END IF
  353.       END IF
  354.  
  355.       AddSectionFilesToCopyList "wing32", SrcDir$, DESTWINSYS$
  356.          Dest1$ = MakePath(DESTWINSYS$,"wing32.dll")
  357.          Dest2$ = MakePath(DESTWINSYS$,"wing32.xxx")
  358.       RenameFilePlease Dest1$,Dest2$
  359.  
  360.    '' Add VfW files here
  361.    AddSectionFilesToCopyList "VfW Runtime", SrcDir$, DESTWINSYS$
  362.    AddSectionFilesToCopyList "AVICodecs", SrcDir$, DESTWINSYS$
  363.    AddSectionFilesToCopyList "ACM Drivers", SrcDir$, DESTWINSYS$
  364.    AddSectionFilesToCopyList "Indeo-ini", SrcDir$, DESTWIN$
  365.    AddSectionFilesToCopyList "OLE2", SrcDir$, DESTWINSYS$
  366.    AddSectionFilesToCopyList "MPlayer", SrcDir$, DESTWIN$
  367.  
  368. COPYFILES:
  369.    RESTARTDIR$ = DESTWIN$
  370.    SetRestartDir RESTARTDIR$
  371.    SrcDir$ = GetSymbolValue ("STF_SRCDIR")
  372.  
  373.    CreateDir DESTDINER$, cmoVital
  374.    CreateDir DESTDINER$ + "Kids\", cmoVital
  375.    CreateDir DESTDINER$ + "Sounds\", cmoVital
  376.    CreateDir DESTDINER$ + "Themes\", cmoVital
  377.    CreateDir DESTDINER$ + "Themes\" + THEMEDIR$ + "\", cmoVital
  378.    ERR = 0
  379.  
  380.    '' copy the files
  381.    CopyFilesInCopyList
  382.  
  383.    '' update wing32
  384.    UpdateWinG32 DESTWINSYS$
  385.  
  386.    '' if we needed to install DVA, create an INI key value
  387.    IF bInstallDVA% = 1 THEN
  388.       CreateSysIniKeyValue DESTWIN$ + "system.ini", "386Enh", "device", MakePath(DESTWINSYS$, "dva.386"), cmoOverwrite
  389.    ENDIF
  390.  
  391.    '' update VfW stuff
  392.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.CVID", "iccvid.drv", cmoOverwrite
  393.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.MSVC", "msvidc.drv", cmoOverwrite
  394.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.IV31", "ir32.dll", cmoOverwrite
  395.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.IV32", "ir32.dll", cmoOverwrite
  396.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.MRLE", "MSRLE.drv", cmoOverwrite
  397.    I% = DoesIniKeyExist (DESTWIN$ + "system.ini", "Drivers", "VIDC.RT21")
  398.    IF I% = 0  THEN
  399.       CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.RT21", "indeov.drv", cmoOverwrite
  400.    END IF
  401.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "VIDC.YVU9", "indeov.drv", cmoOverwrite
  402.    CreateIniKeyValue DESTWIN$ + "WIN.INI", "mci extensions", "avi", "AVIVideo", cmoOverwrite
  403.    CreateIniKeyValue DESTWIN$ + "system.ini", "mci", "AVIVideo", "mciavi.drv", cmoOverwrite
  404.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "WaveMapper", "msacm.drv", cmoOverwrite
  405.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "MSACM.msadpcm", "msadpcm.acm", cmoOverwrite
  406.    CreateIniKeyValue DESTWIN$ + "system.ini", "Drivers", "MSACM.imaadpcm", "imaadpcm.acm", cmoOverwrite
  407.    CreateIniKeyValue DESTWIN$ + "control.ini", "drivers.desc", "msacm.drv", "Microsoft Sound Mapper V2.00", cmoOverwrite
  408.    CreateIniKeyValue DESTWIN$ + "control.ini", "drivers.desc", "msadpcm.acm", "Microsoft ADPCM Codec V2.00", cmoOverwrite
  409.    CreateIniKeyValue DESTWIN$ + "control.ini", "drivers.desc", "imaadpcm.acm", "Microsoft IMA ADPCM Codec V2.00", cmoOverwrite
  410.  
  411.    '' add a key and item for new themepack in ini file
  412.      CreateIniKeyValue DESTWIN$ + "Imagine.INI", "Themepack List", THEMENAME$, "Themes\" + THEMEDIR$ + "\", cmoOverwrite
  413.  
  414.    '' create an ini value for diner root dir
  415.    CreateIniKeyValue DESTWIN$ + "Imagine.INI", "General", "Root", DESTDINER$, cmoOverwrite
  416.  
  417.    '' check for copy errors
  418.    IF ERR <> 0 THEN
  419.       GOTO ERR_UNEXPECTED
  420.    ENDIF
  421.  
  422.    '' more VfW stuff
  423.    Run ("regedit.exe /s " + MakePath(DESTWIN$, "mplayer.reg"))
  424.    Run ("regedit.exe /s " + MakePath(DESTWINSYS$, "OLE2.reg"))
  425.    Run ("regedit.exe /s " + MakePath(DESTWINSYS$, "cleanup.reg"))
  426.    CreateProgmanItem "Accessories", "Media Player", MakePath(DESTWIN$, "mplayer.exe"), "", cmoOverwrite
  427.  
  428.    '' add program manager group and item icon
  429.    CreateProgmanGroup "Edmark", "", cmoNone
  430.    CreateProgmanItem "Edmark", "Imagination Express", DESTDINER$ + "IMAGINE.EXE", "", cmoOverwrite
  431.    CreateProgmanItem "Edmark", "Imagination Express Readme", "WRITE.EXE " + MakePath (DESTDINER$, "README.WRI"), "", cmoOverwrite
  432.  
  433.    SRCDEMO$ = SrcDir$ + "DEMO\DEMO.EXE"
  434.    CreateProgmanItem "Edmark", "Edmark Demos", SRCDEMO$, DESTDINER$ + "DEMO.ICO", cmoOverwrite
  435.  
  436.    ShowProgmanGroup "Edmark", 1, cmoNone
  437.  
  438.    Run ("profdisp.exe")
  439.  
  440. READMEDLG:
  441.    sz$ = UIStartDlg (CUIDLL$, README, "FInfoDlgProc", 0, "")
  442.    IF sz$ = "REACTIVATE" THEN
  443.       GOTO READMEDLG
  444.    ENDIF
  445.    UIPop 1
  446.  
  447. SUCCESS:
  448. '' HERE WE SHOULD REALLY SEE IF WE NEED TO RESTART WINDOWS (MAYBE BECAUSE OF VfW)
  449. '' IF SO, THEN WE WANT TO CHECK FOR LOCKED FILES BEFORE DISPLAYING THE DIALOG AND
  450. '' THEN DISPLAY THE APPROPRIATE DIALOG
  451.  
  452.    '' indicate success to the user and restart windows if necessary
  453.    sz$ = UIStartDlg (CUIDLL$, EXITSUCCESS, "FInfoDlgProc", 0, "")
  454.    IF sz$ = "REACTIVATE" THEN
  455.       GOTO SUCCESS
  456.    ENDIF
  457.    UIPop 1
  458.  
  459.    RESTRT% = RestartListEmpty ()
  460. RESTART:
  461.    IF RESTRT% = 0 THEN
  462.       sz$ = UIStartDlg(CUIDLL$, RESTART, "FInfo0DlgProc", 0, "")
  463.       IF sz$ = "REACTIVATE" THEN
  464.          GOTO RESTART
  465.       ENDIF
  466. DOIT:
  467.       I% = ExitExecRestart ()
  468.       dummy% = DoMsgBox ("Windows cannot be restarted because MS-DOS applications are active.  Close all MS-DOS applications and then click OK.", "Imagination Express", MB_OK + MB_ICONHAND)
  469.       goto DOIT
  470.       END
  471.    ELSEIF bInstallDVA% = 1 THEN
  472.       sz$ = UIStartDlg(CUIDLL$, ASKRESTART, "FInfoDlgProc", 0, "")
  473.       IF sz$ = "CONTINUE" THEN
  474.          I% = RestartWindows
  475.       ELSEIF sz$ = "EXIT" THEN
  476.          UIPopAll
  477.          END
  478.       ELSEIF sz$ = "REACTIVATE" THEN
  479.          GOTO RESTART
  480.       ELSE
  481.          UIPop 1
  482.       END IF
  483.    END IF
  484.    GOTO SEEYA
  485.  
  486. ASKQUIT:
  487.    sz$ = UIStartDlg (CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  488.  
  489.    IF sz$ = "EXIT" THEN
  490.       UIPop 1
  491.       GOTO QUIT
  492.    ELSEIF sz$ = "REACTIVATE" THEN
  493.       GOTO ASKQUIT
  494.    ELSE
  495.       UIPop 1                 '' remove quit dialog and go back to previous dialog
  496.    ENDIF
  497.  
  498.    RETURN
  499.  
  500. QUIT:
  501.    sz$=  UIStartDlg (CUIDLL$, EXITQUIT, "FInfoDlgProc", 0, "")
  502.    IF sz$ = "REACTIVATE" THEN
  503.       GOTO QUIT
  504.    ENDIF
  505.    UIPopALL
  506.    GOTO SEEYA
  507.  
  508. ERR_UNEXPECTED:
  509.    sz$ = UIStartDlg (CUIDLL$, ERROR_UNEXPECTED, "FInfoDlgProc", 0, "")
  510.    IF sz$ = "REACTIVATE" THEN
  511.       GOTO ERR_UNEXPECTED
  512.    ENDIF
  513.    UIPop 1
  514.    GOTO FAILURE
  515.  
  516. EXITFAIL:
  517.    sz$ = UIStartDlg (CUIDLL$, ExitCode%, "FInfoDlgProc", 0, "")
  518.    IF sz$ = "REACTIVATE" THEN
  519.       GOTO EXITFAIL
  520.    ENDIF
  521.    UIPop 1
  522.    GOTO FAILURE
  523.  
  524. FAILURE:
  525.    sz$ = UIStartDlg (CUIDLL$, EXITFAILURE, "FInfoDlgProc", 0, "")
  526.    IF sz$ = "REACTIVATE" THEN
  527.       GOTO FAILURE
  528.    ENDIF
  529.    UIPopAll
  530.    GOTO SEEYA
  531.  
  532.  
  533. ERRORTRAP:
  534.    IF ERR = STFQUIT THEN
  535.       GOTO QUIT
  536.    ENDIF
  537.  
  538.    RESUME NEXT
  539.  
  540.  
  541. SEEYA:
  542.    UIPopAll
  543.    END
  544.  
  545.  
  546.  
  547. '' FROM HERE ON ARE FUNCTIONS IN THE ORIGINAL WING.MST FILE THAT THE WING SETUP USES
  548.  
  549. '**
  550. '** Purpose:
  551. '**     Appends a file name to the end of a directory path,
  552. '**     inserting a backslash character as needed.
  553. '** Arguments:
  554. '**     szDir$  - full directory path (with optional ending "\")
  555. '**     szFile$ - filename to append to directory
  556. '** Returns:
  557. '**     Resulting fully qualified path name.
  558. '*************************************************************************
  559. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  560.     IF szDir$ = "" THEN
  561.    MakePath = szFile$
  562.     ELSEIF szFile$ = "" THEN
  563.    MakePath = szDir$
  564.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  565.    MakePath = szDir$ + szFile$
  566.     ELSE
  567.    MakePath = szDir$ + "\" + szFile$
  568.     END IF
  569. END FUNCTION
  570.  
  571.  
  572.  
  573. SUB UpdateWinG32 (szOrig$) STATIC
  574.     '
  575.     ' Here we check the version ourselves of wing32.dll, since
  576.     ' we can't get version checking for Win32 apps from Win16
  577.     '
  578.     FileNew$ = MakePath(szOrig$, "wing32.dll")
  579.     FileOrig$ = MakePath(szOrig$, "wing32.xxx")
  580.     IF IsWin32FileNewer( FileOrig$, FileNew$ ) THEN
  581.       RemoveFile FileOrig$, cmoForce
  582.     ELSE
  583.       RemoveFile FileNew$, cmoForce    ' get rid of new file
  584.       RenameFilePlease FileOrig$,FileNew$ ' put back old file
  585.     END IF
  586. END SUB
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.